package com.cskaoyan.tcp.edition1;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
              服务器端:
          1.创建Serversocket对象，在指定端口，监听客户端连接请求
             ServerSocket: 此类实现服务器套接字


             ServerSocket(int port)
               创建绑定到特定端口的服务器套接字。
               服务器套接字等待请求通过网络传入

          2.收到客户端连接请求后，建立Socket连接
            public Socket accept()
                1. 侦听并接受到此套接字的连接。
                2. 此方法在连接传入之前一直阻塞。

          3.如果连接建立成功，就表明已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入
           从socket中根据需要获取输入，或输出流
          4.根据需要向流中写入数据或从流中读数据
          5.释放资源

          注意事项:
          1. accept 是一个阻塞方法
          2. BindException: Address already in use， 一个端口号只能绑定一个进程


 */
public class Server {

    public static void main(String[] args) throws IOException {

        // 创建ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(5678);

        // accept接收ServerSocket所绑定的端口上，接收的连接请求，建立连接
        Socket socket = serverSocket.accept();

        // 获取socket对象的输入流
        InputStream in = socket.getInputStream();

        // 读取发送端发送的数据
        byte[] buf = new byte[1024];
        int count = in.read(buf);

        // 解析接收到的数据
        String result = new String(buf, 0, count);
        System.out.println(result);


        // 关闭socket
        socket.close();
        serverSocket.close();
    }
}
